 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package slicer_20;

import java.awt.Color;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 * Det här är exporteraren som tar det man ritat och omvandlar det till filer som fungerar i en webbläsare.
 * @author Mikael Köhlmyr | mikael@kohlmyr.com | http://www.kmyr.net
 */
public class Exporter{
    ArrayList<Integer> Rowgrp = new ArrayList<Integer>();
    MyPanel parent;
    String name;
    public String outcss = "";
    public String outhtml = "";

    /**
     * Vi tar emot ägaren av exporteraren samt skapar en ruta som frågar vad du vill namnge din template.
     * @param parent
     */
    public Exporter(MyPanel parent){
        this.parent = parent;
        name = JOptionPane.showInputDialog(null,"Name your template","Export!",JOptionPane.PLAIN_MESSAGE);
        if(name != null){
            export();
        }
    }
    
    public void export(){
        sortByY();
        convert();
        writeFile();
    }
    /**
     * writeFile skapar våra två filer (css, html) och skriver till dessa den data vi samlat in i convert.
     */
    public void writeFile(){
        try{
            File file = new File("C:\\slicer_20\\" + name + ".css");
            FileWriter fstream = new FileWriter(file);
            BufferedWriter out = new BufferedWriter(fstream);
                out.write("/* " + name + ".css was generated with slicer_20. Visit www.kmyr.net for more information. */ \n");
                out.write("body{\n margin:0px;\npadding:0px;\n}\n");
                out.write(outcss);
                out.close();
            file = new File("C:\\slicer_20\\" + name + ".html");
            fstream = new FileWriter(file);
            out = new BufferedWriter(fstream);
                out.write("<!-- " + name + ".html was generated with slicer_20. Visit www.kmyr.net for more information. --> \n");
                out.write("<html>\n<head>\n<link rel='stylesheet' href='" + name +".css'/>\n</head>\n<body>\n");
                out.write(outhtml);
                out.write("\n</body>\n</html>");
                out.close();
        }
        catch (Exception e){
            System.out.println("Failure. Exporter.newFile() caught " + e.getMessage());
        }
    }

    /**
    *Denna metoden tar datan från Rektanglarna och omvandlar det till något som kan användas i css och html.
     * Från början var det tänkt att den skulle vara mycket mer avancerad och därmed skulle kunna göra mycket mer avancerade templates, men det såg inte ut som att ja skulle hinna min deadline så jag skalade ner målet för denna funktion lite grann till något som var görbart.
     * Filerna den nu skapar är inte lika användbara som jag skulle vilja, men de _är_ fungerande webbsidor.
    */
    public void convert(){
  
        
            for(int i = 0; i < parent.Rectangles.size(); i++){
                
                outhtml += "<div id='" + name + i +"'>" + name + i + "</div>";
                outcss += "\n #" + name + i + "{";
                outcss += "\n width:" + parent.Rectangles.get(i).width + "px;";
                outcss += "\n height:" + parent.Rectangles.get(i).height + "px;";
                String hex = Integer.toHexString(parent.Colors.get(i).getRGB() & 0x00ffffff);
                    if(hex.length() < 6){
                        hex = "0" + hex;
                    }
                outcss += "\n background:#" + hex + ";";
                outcss += "\n margin-top:" + parent.Rectangles.get(i).y + "px;";
                outcss += "\n margin-left:" + parent.Rectangles.get(i).x + "px;";
                outcss += "\n position: fixed;";
                outcss += "\n }";
                
                System.out.println(i);
            }

    }

/**
 * sortByY kör en insertionsort som flyttar upp de fyrkanter som ligger högst upp grafiskt till toppen av listan
 */
    public void sortByY(){
        for(int i = 0; i < parent.Rectangles.size() -1; i++){
            for(int j = i; 0 <= j; j--){
                if(parent.Rectangles.get(j).y > parent.Rectangles.get(j+1).y){
                    MyRectangle rtemp = parent.Rectangles.get(j);
                    parent.Rectangles.set(j, parent.Rectangles.get(j+1));
                    parent.Rectangles.set(j+1, rtemp);
                    Color ctemp = parent.Colors.get(j);
                    parent.Colors.set(j, parent.Colors.get(j+1));
                    parent.Colors.set(j+1, ctemp);
                }
                else{
                    break;
                }
            }
        }
    }
}
